"""迭代器"""""

'''定义'''
# 迭代就是更新换代取值，器就是工具，更新换代取值的工具

'''创建迭代器的规则'''
# 必须遵守迭代协议：迭代器必须有两个特殊方法__iter__ __next__
# __iter__ 代表的就是迭代器本身，返回值是迭代器
# __next_ 返回的迭代器的下一个值

'''将可迭代对象 变成迭代器'''
dict01 = {'name': 'dengze', 'city': '沈阳', 'age': 1}
i_dict = dict01.__iter__()  # i_dict 就是一个迭代器

# print(i_dict) # <dict_keyiterator object at 0x000001737AB2BE50>
# print(i_dict.__next__()) # name
# print(i_dict.__next__()) # city
# print(i_dict.__next__()) # age
# print(i_dict.__next__()) # StopIteration 值都取完了，终止信号

'''编写一个迭代器'''


# 仿照range() 造一个迭代器

class IntegerIteror:
    def __init__(self, *args):
        # 解决实参个数问题
        if len(args) == 1:
            self.end = args[0]
            self.start = 0
            self.step = 1
        elif len(args) == 2:
            self.start = args[0]
            self.end = args[1]
            self.step = 1
        elif len(args) == 3:
            self.start = args[0]
            self.end = args[1]
            self.step = args[2]
        else:
            raise ValueError('IntegerIteror需要 1个 或者 2个 或者 3个参数')

    def __iter__(self):
        return self

    def __next__(self):
        if self.start < self.end:
            value = self.start
            self.start += self.step
            return value
        else:
            raise StopIteration


a = IntegerIteror(2,10,3)
print(a)  # <__main__.IntegerIteror object at 0x00000220247A7FD0>
# print(a.__next__())
# print(a.__next__())

for i in a:
    print(i)